/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Control;

import Entidad.Reporte;
import java.util.ArrayList;
import java.util.Calendar;

/**
 *
 * @author Omar Beltran
 */
public class Operaciones {
    
    final private int CERO = 0;//limite = 0
    final private int MINIMO = 2;//datos ingresados menor a 5
    
    //Creacion ArrayList de tipo Reporte donde se iran almacennado los datos ingresados
    private ArrayList<Reporte> reportes = new ArrayList<>();
    private ArrayList<Reporte> pronosticos = new ArrayList<>();
    
    //constructor default
    public Operaciones(){}
    
    //metodo que permite agregar un objeto de tipo Reporte a un ArrayList
    //recibe como parametro objeto tipo Reporte
    public void addReporte(Reporte reporte){
        this.getReportes().add(reporte);
    }
    
    //metodo que permite eliminar el último dato ingresado
    public boolean removeLast(){
        
        if(getReportes().isEmpty())
            return false;
        else{    
            this.getReportes().remove(getReportes().size()-1);
            return true;
        }    
    }
   
    //metodo que permite vaciar el ArrayList
    public boolean removeAllReporte(){
        
        if(getReportes().isEmpty())
            return false;
        else{    
            this.getReportes().removeAll(getReportes());
            return true;
        }    
        
    }
    
    //metodo que permite mostrar los datos ingresados
    public void mostrarReportes(int limite){
        
       for(int i = 0 ; i < limite ; i++){
           System.out.println("Temperatura "+getReportes().get(i).getTemperatura()+
                              "Fecha: "+getReportes().get(i).getFecha().get(Calendar.DATE)+
                                    "/"+getReportes().get(i).getFecha().get(Calendar.MONTH)+
                                    "/"+getReportes().get(i).getFecha().get(Calendar.YEAR));
        }
     }
    
    
    //metodo que permite mostrar los pronosticos calculados
    public void mostrarPronosticos(){
       int dia = 0;
       for(int i = 0 ; i <  pronosticos.size(); i++){
           dia = pronosticos.get(i).getFecha().get(Calendar.DATE)+(i+1);
           System.out.println(dia+"/"+pronosticos.get(i).getFecha().get(Calendar.MONTH)+
                                  "/"+pronosticos.get(i).getFecha().get(Calendar.YEAR)+
                                  ": "+pronosticos.get(i).getTemperatura()+
                                  "°C");
        }
     }
    
    //metodo que determina si el caracter ingresado es un valor numérico
    //recibe como parametro un String
    //retorna true si es número
    //retorna false si no lo es
    public boolean isNumber(String dato){
        try {
            Integer.parseInt(dato);
            return true;
	} catch (NumberFormatException errorFormato){
            return false;
	}
    }
    
    //metodo que permite validar el valor ingresado en el campo de texto txtWeatherReport
    //este metodo recibe como parametro un String
    //retorna false si el campo esta vacio
    //retorna true si se ingreso un valor
    public boolean validarDatos(String temperatura){
        
        if (temperatura.equals(""))
            return false;
        else
            return true;
        
    }
    
    //metodo que permite validar el valor ingresado en el campo de texto txtValuestoForecast
    //este metodo recibe como parametro un int
    //retorna CERO si el valor ingresado es 0
    //retorna MINIMO si aún no se ingresan los 5 datos
    public int validarDatos(int limite){
        
        if (limite == 0)
            return CERO;
        
        else 
            if(getReportes().size() < 5 )
                return MINIMO;
            
            //se llaman a los algoritmos de pronostico
            else{
                
               
                SMA sma = new SMA(reportes,limite-1);
                pronosticos = sma.determinarPronosticos();
               // DES des = new DES();
                //des.Double_exp_smoth(reportes, limite);
                return -1;  
            }    
    }

    /**
     * @return the reportes
     */
    public ArrayList<Reporte> getReportes() {
        return reportes;
    }

    /**
     * @param reportes the reportes to set
     */
    public void setReportes(ArrayList<Reporte> reportes) {
        this.reportes = reportes;
    }
}
